package com.sicheng.蓝桥.练习题.dp;

import java.util.HashMap;
import java.util.Scanner;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/6/3 15:23
 */
public class 蓝肽子序列 {
    /**
     * 蓝肽子序列
     * 时间:1.0s 空间：512MB 总分:15分
     * L星球上的生物由蛋蓝质组成，每一种蛋蓝质由一类称为蓝肽的物资首尾连接成一条长链后折叠而成。
     * 生物学家小乔正在研究L星球上的蛋蓝质。她拿到两个蛋蓝质的蓝肽序列，想通过这两条蓝肽序列的共同特点来分析两种蛋蓝质的相似性。
     * 具体的，一个蓝肽可以使用1至5个英文字母表示，其中第一个字母大写，后面的字母小写。一个蛋蓝质的蓝肽序列可以用蓝肽的表示顺序拼接而成。
     * 在一条蓝肽序列中，如果选取其中的一些位置，把这些位置的蓝肽取出，并按照它们在原序列中的位置摆放，则称为这条蓝肽的一个子序列。蓝肽的子序列不一定在原序列中是连续的，中间可能间隔着一些未被取出的蓝肽。
     * 如果第一条蓝肽序列可以取出一个子序列与第二条蓝肽序列中取出的某个子序列相等，则称为一个公共蓝肽子序列。
     * 给定两条蓝肽序列，找出他们最长的那个公共蓝肽子序列的长度。
     * 【输入格式】
     * 输入两行，每行包含一个字符串，表示一个蓝肽序列。字符串中间没有空格等分隔字符。
     * 【输出格式】
     * 输出一个整数，表示最长的那个公共蓝肽子序列的长度。
     * 【样例输入】
     * LanQiaoBei
     * LanTaiXiaoQiao
     * 【样例输出】
     * 2
     * 【样例说明】
     * 最长的公共蓝肽子序列为LanQiao，共两个蓝肽。
     * 【评测用例规模与约定】
     * 对于20%的评测用例，两个字符串的长度均不超过20。
     * 对于50%的评测用例，两个字符串的长度均不超过100。
     * 对于所有评测用例，两个字符串的长度均不超过1000。
     */

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        String t = scanner.nextLine();
        HashMap<Integer, String> S = new HashMap<>();
        HashMap<Integer, String> T = new HashMap<>();

        get(s, S);
        get(t, T);
        long[][] dp = new long[S.size() + 1][T.size() + 1];
        for (int i = 1; i <= S.size(); i++) {
            for (int j = 1; j <= T.size(); j++) {
                if (!S.get(i - 1).equals(T.get(j - 1))) {
                    dp[i][j] = Math.max(dp[i - 1][j], Math.max(dp[i - 1][j - 1], dp[i][j - 1]));
                } else {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }
            }
        }
        System.out.println(dp[S.size()][T.size()]);

    }

    private static void get(String s, HashMap<Integer, String> S) {
        int start = 0;
        int count = 0;
        for (int i = 1; i <= s.length(); i++) {
            char c = i == s.length() ? 'A' : s.charAt(i);
            if ('A' <= c && c <= 'Z') {
                S.put(count++, s.substring(start, i));
                start = i;
            }
        }
    }
}
